package thread.learn;

import java.util.concurrent.TimeUnit;

/**
 * 请问当一个线程进入一个对象的synchronized方法A之后，其它线程是否可进入此对象的synchronized方法B？
 * @author jiangwz
 * @create 2019/11/4.
 */
public class SyncTest {

    public synchronized void methodA(){

        try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); }
        System.out.println("methodA");
    }

    public /*static*/ synchronized void methodB(){
        System.out.println("methodB");
    }

    public  void methodC(){
        System.out.println("methodC");
    }

    public static void main(String[] args){

        // 当一个线程进入 对象的 同步方法a时,其他线程无法进入该对象的同步方法b(方法b如果是static的就可以)
        SyncTest syncTest = new SyncTest();
        new Thread(() -> {
            syncTest.methodA();
        }, "1").start();
        new Thread(() -> {
            syncTest.methodB();
        }, "2").start();
        new Thread(() -> {
            syncTest.methodC();
        }, "3").start();
    }
}
